package demo;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * @Author: WWQ
 * @Date: 2019/4/4 10:50
 * @Version 1.0
 * 中间操作
 */
public class StreamAPITest2 {

    //2. 中间操作
    List<Employee> emps = Arrays.asList(
            new Employee("李四", 59, 6666.66),
            new Employee("张三", 18, 9999.99),
            new Employee("王五", 28, 3333.33),
            new Employee("赵六", 8, 7777.77),
            new Employee("赵六", 8, 7777.77),
            new Employee("赵六", 8, 7777.77),
            new Employee("田七", 38, 5555.55)
    );

    List<String> list = new ArrayList<String>(Arrays.asList("ab", "cd", "ef", "1fsd", "asdf", "asdg","ab", "cd", "ef", "1fsd", "asdf", "asdg"));


    /*
    筛选与切片
    filter——接收 Lambda ， 从流中排除某些元素。
    limit——截断流，使其元素不超过给定数量。
    skip(n) —— 跳过元素，返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个，则返回一个空流。与 limit(n) 互补
    distinct——筛选，通过流所生成元素的 hashCode() 和 equals() 去除重复元素
    */
    //排除元素
    @Test
    public void test1() {
        Stream<Employee> stream = emps.stream().filter((e) -> e.getAge() > 10);
        //只有做终止操作时才会一次性的全部执行
        stream.forEach(System.out::println);
    }
    //截取元素
    @Test
    public void test2() {
        Stream<String> stream = list.stream().limit(12);
        stream.forEach(System.out::println);
    }
    //跳过元素
    @Test
    public void test3() {
        Stream<String> stream = list.stream().skip(3);
        stream.forEach(System.out::println);
    }
    //去重
    @Test
    public void test4() {
        Stream<String> stream = list.stream().distinct();
        stream.forEach(System.out::println);

    }
}
